package cxydmmszl.chapter05.t079;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * <li style="color: red;">Prob</li>
 * 将整数字符串转成整数值
 * <li style="color: green;">Desc</li>
 * 给定一个字符串str，如果str符合日常书写的整数形式，并且属于32位整数范围，返回str代表的整数值，否则返回0。
 * <li style="color: green;">Input</li>
 * 输出包括一行代表 str（1≤length(str)≤100）。
 * <li style="color: green;">Output</li>
 * 输出一行，代表返回的值。
 * <li style="color: blue;">Link</li> CD97
 *
 * @author habitplus
 * @since 2021-09-08 14:05
 */
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        String s = bf.readLine();
        bf.close();

        int ans = strToInt(s);
        System.out.println(ans);
    }

    private static int strToInt(String s) {
        if (s == null || s.length() == 0) return 0;

        char[] chs = s.toCharArray();

        if (!isValidNumberStr(chs)) return 0;

        boolean posi = chs[0] != '-';
        int minZ = Integer.MIN_VALUE / 10;
        int minY = Integer.MIN_VALUE % 10;
        int res = 0;
        int cur;

        for (int i = posi ? 0 : 1; i < chs.length; i++) {
            cur = '0' - chs[i];
            if (res < minZ || (res == minZ && cur < minY)) {
                // 溢出
                return 0;
            }
            res = res * 10 + cur;
        }

        return posi && res == Integer.MIN_VALUE ? 0 : (posi ? -res : res);
    }

    private static boolean isValidNumberStr(char[] chs) {
        if (chs == null || chs.length == 0) return false;

        int n = chs.length;
        char first = chs[0];
        // 不以 ‘-’ 和 数字开头
        if (first != '-' && (first < '0' || first > '9')) return false;
        // 以 ‘-’ 开头，但长度为 1 或者第二个字符为 ‘0’
        if (first == '-' && (n == 1 || chs[1] == '0')) return false;
        // 以 ‘0‘ 开头，但长度大于 1
        if (first == '0' && n > 1) return false;

        // 从第二个字符开始，出现非数字字符就返回 false
        for (int i = 1; i < n; i++) {
            if (chs[i] < '0' || chs[i] > '9') {
                return false;
            }
        }

        return true;
    }
}
